package com.ruoyi.common.utils;

import java.io.PrintWriter;
import java.io.StringWriter;

import org.apache.commons.lang3.exception.ExceptionUtils;

/**
 * 错误信息处理类。
 *
 * @author ruoyi
 */
public class ExceptionUtil {
    /**
     * 获取exception的详细错误信息。
     *
     * @param e 异常对象
     * @return 包含异常堆栈信息的字符串
     */
    public static String getExceptionMessage(Throwable e) {
        StringWriter sw = new StringWriter();
        // 将异常堆栈信息输出到StringWriter中
        e.printStackTrace(new PrintWriter(sw, true));
        return sw.toString();
    }

    /**
     * 获取异常的根本原因错误信息。
     *
     * @param e 异常对象
     * @return 根本原因的错误信息，如果无错误信息则返回默认值
     */
    public static String getRootErrorMessage(Exception e) {
        // 获取异常的根本原因
        Throwable root = ExceptionUtils.getRootCause(e);
        root = (root == null ? e : root);
        if (root == null) {
            return "";
        }
        String msg = root.getMessage();
        if (msg == null) {
            return "null";
        }
        // 使用StringUtils处理可能的空字符串情况
        return StringUtils.defaultString(msg);
    }
}

